package com.sjms._09_结构_享元模式;

/**
 * 享元模式（预加载单例）
 * “元” 理解为 “同一地址对象”
 * 运用共享技术，减少对象的创建，降低对象的数量，降低内存消耗，提高性能
 * <p>
 * 注意
 * 线程安全问题
 * 内部状态：属性值由类生成时确定，不会改变
 * 外部状态：属性值由参数决定，依赖传递值
 * <p>
 * 实现思路
 * 多个位置的操作，需要相同的一些对象，此时将相同的一些对象封装进一个工厂内，创建后持久化到内存中
 * 可以在任意位置，通过key进行获取同一地址的对象，减少创建
 * <p>
 * 代码举例
 * 存在多种缓存实现，缓存对象只需要一个，但是不保证什么情况下使用什么类型
 * 此时可以采用享元模式，“元” 理解为 “同一地址对象”
 * <p>
 * 源码应用
 * Integer 问题
 * 使用场景：String 类型，连接池
 * Integer.valueOf() 、Long.valueOf()
 * 当数字范围超出， short 1字节 （-128 、+127），生成模式为 new 新对象 ,否则直接读 IntegerCache缓存,值可以通过JVM参数 调整
 */
public class _Test {

    public static void main(String[] args) {
        Cache local = CacheFactory.getCache("local");
        local.set("name", "小明");
        local.get("name");


        Cache redis = CacheFactory.getCache("redis");
        redis.set("name", "小明");
        redis.get("name");


        Cache cache = CacheFactory.getCache("未知");
        cache.set("name", "小明");
        cache.get("name");

    }
}
